﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Security.Cryptography;

namespace FrbaCommerce.Abm_Empresa
{
    public partial class FormAltaEmpresa : Form
    {
        

        public FormAltaEmpresa()
        {
            InitializeComponent();
            monthCalendarCreacion.TodayDate = Program.FechaActual;
            monthCalendarCreacion.SelectionStart = Program.FechaActual;
        }

        public int altaEmpresa(Registro_de_Usuario.FormRegistroUsuario.Usuario user, Registro_de_Usuario.FormRegistroUsuario.Empresa empresa)
        {

            SqlConnection con = Program.obtenerConexion();

            Codigo_reutilizable.PasswordHash password = new Codigo_reutilizable.PasswordHash();


            //Hago 2 consultas, en una creo el usuario, en la otra el cliente para ese usuario
            //Este codigo se repite con empresa, ver si lo podemos unificar
            //Aparte, chequeo que el usuario no exista!
            SqlCommand verificarExistencia = new SqlCommand("SELECT COUNT(*) FROM Monkey_coders.Usuarios WHERE usr_name = '" + user.nombre + "'", con);

            if (Convert.ToInt32(verificarExistencia.ExecuteScalar()) == 1)
            {
                MessageBox.Show("El usuario ya esta en uso, por favor eliga otro nombre de usuario");
                return 1;
            }

            //Compruebo que no se repitan: Razon Social y CUIT

            SqlCommand checkRazSoc = new SqlCommand("SELECT COUNT(emp_razon_social) FROM Monkey_Coders.Empresas WHERE emp_razon_social = '" + textBoxRazonSocial.Text + "' GROUP BY emp_razon_social", con);
            if (Convert.ToInt32(checkRazSoc.ExecuteScalar()) > 0)
            {
                MessageBox.Show("La Razón Social ya se encuentra registrada", "Error",
                 MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }

            //CUIT
            SqlCommand checkCUIT = new SqlCommand("SELECT COUNT(emp_cuit) FROM Monkey_Coders.Empresas WHERE emp_cuit = '" + textBoxCUIT.Text + "' GROUP BY emp_cuit", con);
            if (Convert.ToInt32(checkCUIT.ExecuteScalar()) > 0)
            {
                MessageBox.Show("El CUIT ya se encuentra registrado", "Error",
                 MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }



            SqlCommand altaUsuario = new SqlCommand("INSERT INTO [Monkey_Coders].Usuarios (usr_name,usr_passwd,usr_habilitado) OUTPUT INSERTED.usuario_id VALUES (@User,@PW,@Hab)", con);
            altaUsuario.Parameters.Add("User", SqlDbType.VarChar, 255).Value = user.nombre;
            altaUsuario.Parameters.Add("PW", SqlDbType.VarChar, 64).Value = password.SHA256Encrypt(user.pw);
            altaUsuario.Parameters.Add("Hab", SqlDbType.Bit, 1).Value = user.hab;
            Int32 newID = Convert.ToInt32(altaUsuario.ExecuteScalar());

            //Pido el usuario

            SqlCommand altaEmpresa = new SqlCommand("INSERT INTO [Monkey_Coders].Empresas (emp_usuario_id, emp_cuit, emp_razon_social, emp_telefono, emp_fecha_creacion, emp_mail, emp_ciudad, emp_cod_postal, emp_localidad, emp_dom_calle, emp_nro_calle, emp_piso, emp_dpto, emp_nbre_contacto) VALUES (@ID, @Cuit, @RS, @Tel, @Fecha, @Mail, @Ciu, @CP, @Loc, @Dom, @Nro, @Piso, @Dpto, @NomContacto)", con);
            altaEmpresa.Parameters.Add("ID", SqlDbType.Int, 18).Value = newID;
            altaEmpresa.Parameters.Add("Cuit", SqlDbType.VarChar, 50).Value = empresa.CUIT; 
            altaEmpresa.Parameters.Add("RS", SqlDbType.VarChar, 255).Value = empresa.RazonSocial;
            altaEmpresa.Parameters.Add("Tel", SqlDbType.BigInt,11).Value = empresa.Tel;
            altaEmpresa.Parameters.Add("Fecha", SqlDbType.Date, 50).Value = empresa.fechaCreacion; 
            altaEmpresa.Parameters.Add("Mail", SqlDbType.VarChar, 50).Value = empresa.Mail;
            altaEmpresa.Parameters.Add("Ciu", SqlDbType.VarChar, 50).Value = empresa.Ciudad;
            altaEmpresa.Parameters.Add("CP", SqlDbType.Int, 18).Value = empresa.CP;
            altaEmpresa.Parameters.Add("Loc", SqlDbType.VarChar, 50).Value = empresa.Localidad;
            altaEmpresa.Parameters.Add("Dom", SqlDbType.VarChar, 100).Value = empresa.Calle;
            altaEmpresa.Parameters.Add("Nro", SqlDbType.Int, 18).Value = empresa.Nro;
            altaEmpresa.Parameters.Add("Piso", SqlDbType.Int, 18).Value = empresa.Piso;
            altaEmpresa.Parameters.Add("Dpto", SqlDbType.VarChar, 50).Value = empresa.Dpto;
            altaEmpresa.Parameters.Add("NomContacto", SqlDbType.VarChar, 25).Value = empresa.NombreContacto;
            



            altaEmpresa.ExecuteNonQuery();

            //Relaciono al Usuario con el Rol
            SqlCommand altaEmpresaRol = new SqlCommand("INSERT INTO [Monkey_Coders].usuario_rol(ur_rol_id, ur_user_id) VALUES (2, @ID)", con);
            altaEmpresaRol.Parameters.Add("ID", SqlDbType.Int, 18).Value = newID;
            altaEmpresaRol.ExecuteNonQuery();

            return 0;

        }


        private void buttonAlta_Click_1(object sender, EventArgs e)
        {
            Registro_de_Usuario.FormRegistroUsuario.Usuario defaultUser;

            SqlConnection con = Program.obtenerConexion();
            SqlCommand getLastID = new SqlCommand("SELECT MAX(usuario_id) FROM Monkey_Coders.Usuarios", con);


            defaultUser.nombre = "defaultUSER" + (Convert.ToInt32(getLastID.ExecuteScalar()) + 1);
            defaultUser.pw = "1234";
            defaultUser.hab = true;
            defaultUser.des = false;

            Registro_de_Usuario.FormRegistroUsuario.Empresa empresa = new Registro_de_Usuario.FormRegistroUsuario.Empresa();
            empresa.RazonSocial = textBoxRazonSocial.Text;
            empresa.Mail = textBoxMail.Text;
            empresa.Tel = Convert.ToInt64(textBoxTel.Text);
            empresa.Calle = textBoxCalle.Text;
            empresa.Nro = Convert.ToInt32(textBoxNro.Text);
            empresa.Piso = Convert.ToInt32(textBoxPiso.Text);
            empresa.Dpto = textBoxDepto.Text;
            empresa.CP = Convert.ToInt32(textBoxCP.Text);
            empresa.Ciudad = textBoxCiudad.Text;
            empresa.CUIT = textBoxCUIT.Text;
            empresa.NombreContacto = textBoxNomCont.Text;
            empresa.fechaCreacion = monthCalendarCreacion.SelectionEnd.ToShortDateString();

            if (altaEmpresa(defaultUser, empresa) == 0)
            {
                MessageBox.Show("Alta exitosa!");
                this.Close();
            }

        }

        private void FormAltaEmpresa_Load(object sender, EventArgs e)
        {

        }

    }
}